package cn._2dland.sakushi.util;

public class JSONUtils {
	public static String unicodeToNative(String str) {
		int len = str.length();
		StringBuffer buf = new StringBuffer(len);

		char c;
		for(int i=0; i<len; ) {
			c = str.charAt(i++);
			if(c=='\\' && i!=len) {
				c = str.charAt(i++);
				if(c == 'u') {
					// 读取后面的四个字符，并构成一个unicode char
					int value = 0;
					for(int j=0; j<4; j++) {
						c = str.charAt(i++);
						switch(c) {
						case '0': case '1': case '2': case '3': case '4':
						case '5': case '6': case '7': case '8': case '9':
							value = (value << 4) + c - '0';
							break;
						case 'a': case 'b': case 'c': 
						case 'd': case 'e': case 'f':
							value = (value << 4) + 10 + c - 'a';
							break;
						case 'A': case 'B': case 'C':
						case 'D': case 'E': case 'F':
							value = (value << 4) + 10 + c - 'A';
							break;
						default:
							throw new IllegalArgumentException("Malformed \\uxxxx encoding.");
						}
					}
					buf.append((char)value);
				}
				else {
					buf.append('\\').append(c);
				}
			}
			else
				buf.append(c);
		}
		return buf.toString();
	}
}
